package com.github.niefy.modules.wx.service.impl;

import com.github.niefy.modules.wx.service.DataAnalyzeService;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.datacube.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import static com.github.niefy.modules.wx.service.MsgReplyService.logger;

@Service
public class DataAnalyzeServiceImpl implements DataAnalyzeService {
    @Autowired
    private WxMpService wxMpService;

    /**
     * 获取增减用户统计数据
     * @return
     */
    public List<WxDataCubeUserSummary> getUserSummary(String date1,String date2){
        try {
            return wxMpService.getDataCubeService().getUserSummary(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取累计用户数据
     * @param date1 起始时间
     * @param date2 结束时间
     * @return 结果集合
     */
    public List<WxDataCubeUserCumulate> getUserCumulate(String date1,String date2){
        try {
            return wxMpService.getDataCubeService().getUserCumulate(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }
    //获取图文群发每日数据（getarticlesummary）
    public List<WxDataCubeArticleResult> getArticleSummary(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getArticleSummary(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }

    // 获取图文群发总数据（getarticletotal）

    public List<WxDataCubeArticleTotal> getArticleTotal(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getArticleTotal(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }

    // 获取图文统计数据（getuserread）
    public List<WxDataCubeArticleResult> getUserRead(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getUserRead(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }

    //获取图文统计分时数据（getuserreadhour）

    public List<WxDataCubeArticleResult> getUserReadHour(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getUserReadHour(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }

    //获取图文分享转发数据（getusershare）
    public List<WxDataCubeArticleResult> getUserShare(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getUserShare(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }

    //获取图文分享转发分时数据（getusersharehour）
    public List<WxDataCubeArticleResult> getUserShareHour(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getUserShareHour(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }



    //获取消息发送概况数据（getupstreammsg）
    public List<WxDataCubeMsgResult> getUpstreamMsg(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getUpstreamMsg(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }

    //获取消息分送分时数据（getupstreammsghour）
    public List<WxDataCubeMsgResult> getUpstreamMsgHour(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getUpstreamMsgHour(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }

    //获取消息发送周数据（getupstreammsgweek）
    public List<WxDataCubeMsgResult> getUpstreamMsgWeek(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getUpstreamMsgWeek(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }

//    获取消息发送月数据（getupstreammsgmonth）
    public List<WxDataCubeMsgResult> getUpstreamMsgMonth(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getUpstreamMsgMonth(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }

//    获取消息发送分布数据（getupstreammsgdist）
    public List<WxDataCubeMsgResult> getUpstreamMsgDist(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getUpstreamMsgDist(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }

//    获取消息发送分布周数据（getupstreammsgdistweek）
    public List<WxDataCubeMsgResult> getUpstreamMsgDistWeek(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getUpstreamMsgDistWeek(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }

//    获取消息发送分布月数据（getupstreammsgdistmonth）
    public List<WxDataCubeMsgResult> getUpstreamMsgDistMonth(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getUpstreamMsgDistMonth(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }




//    获取接口分析数据（getinterfacesummary）
    public List<WxDataCubeInterfaceResult> getInterfaceSummary(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getInterfaceSummary(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }

//    获取接口分析分时数据（getinterfacesummaryhour）
    public List<WxDataCubeInterfaceResult> getInterfaceSummaryHour(String date1, String date2){
        try {
            return wxMpService.getDataCubeService().getInterfaceSummaryHour(fmtDate(date1),fmtDate(date2));
        } catch (WxErrorException e) {
            e.printStackTrace();
            logger.error("数据获取异常",e);
        }
        return null;
    }
    /**
     * 字符串转时间
     * @param date 格式字符
     * @return
     */
    public static Date fmtDate(String date){
        SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
        try {
            return fmt.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}
